home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.5 Applications 2004 May / SGI IRIX 6.5 Applications 2004 May.iso / dist / java3d.idb / usr / demos / java / j3d / programs / examples / GearTest / SpurGearThinBody.java.z / SpurGearThinBody.java
Encoding:
Java Source  |  2003-08-08  |  7.6 KB  |  181 lines

  1. /*
  2.  *    @(#)SpurGearThinBody.java 1.9 02/04/01 15:03:18
  3.  *
  4.  * Copyright (c) 1996-2002 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  *
  10.  * - Redistributions of source code must retain the above copyright
  11.  *   notice, this list of conditions and the following disclaimer.
  12.  *
  13.  * - Redistribution in binary form must reproduce the above copyright
  14.  *   notice, this list of conditions and the following disclaimer in
  15.  *   the documentation and/or other materials provided with the
  16.  *   distribution.
  17.  *
  18.  * Neither the name of Sun Microsystems, Inc. or the names of
  19.  * contributors may be used to endorse or promote products derived
  20.  * from this software without specific prior written permission.
  21.  *
  22.  * This software is provided "AS IS," without a warranty of any
  23.  * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
  24.  * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
  25.  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
  26.  * EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
  27.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  28.  * DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN
  29.  * OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
  30.  * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
  31.  * PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
  32.  * LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE,
  33.  * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  34.  *
  35.  * You acknowledge that Software is not designed,licensed or intended
  36.  * for use in the design, construction, operation or maintenance of
  37.  * any nuclear facility.
  38.  */
  39.  
  40. import java.lang.Math.*;
  41. import javax.media.j3d.*;
  42. import javax.vecmath.*;
  43.  
  44. public class SpurGearThinBody extends SpurGear {
  45.     
  46.     /**
  47.      * Construct a SpurGearThinBody;
  48.      * @return a new spur gear that conforms to the input paramters
  49.      * @param toothCount number of teeth
  50.      * @param pitchCircleRadius radius at center of teeth
  51.      * @param shaftRadius radius of hole at center
  52.      * @param addendum distance from pitch circle to top of teeth
  53.      * @param dedendum distance from pitch circle to root of teeth
  54.      * @param gearThickness  thickness of the gear
  55.      */
  56.     public SpurGearThinBody(int toothCount, float pitchCircleRadius,
  57.                 float shaftRadius, float addendum, float dedendum,
  58.                 float gearThickness) {
  59.     this(toothCount, pitchCircleRadius, shaftRadius,
  60.          addendum, dedendum, gearThickness, gearThickness, 0.25f, null);
  61.     }
  62.  
  63.     /**
  64.      * Construct a SpurGearThinBody;
  65.      * @return a new spur gear that conforms to the input paramters
  66.      * @param toothCount number of teeth
  67.      * @param pitchCircleRadius radius at center of teeth
  68.      * @param shaftRadius radius of hole at center
  69.      * @param addendum distance from pitch circle to top of teeth
  70.      * @param dedendum distance from pitch circle to root of teeth
  71.      * @param gearThickness  thickness of the gear
  72.      * @param look the gear's appearance
  73.      */
  74.     public SpurGearThinBody(int toothCount, float pitchCircleRadius,
  75.                 float shaftRadius, float addendum, float dedendum,
  76.                 float gearThickness,
  77.             Appearance look) {
  78.     this(toothCount, pitchCircleRadius, shaftRadius,
  79.          addendum, dedendum, gearThickness, gearThickness, 0.25f, look);
  80.     }
  81.  
  82.     /**
  83.      * Construct a SpurGearThinBody;
  84.      * @return a new spur gear that conforms to the input paramters
  85.      * @param toothCount number of teeth
  86.      * @param pitchCircleRadius radius at center of teeth
  87.      * @param shaftRadius radius of hole at center
  88.      * @param addendum distance from pitch circle to top of teeth
  89.      * @param dedendum distance from pitch circle to root of teeth
  90.      * @param gearThickness thickness of the gear
  91.      * @param toothTipThickness thickness of the tip of the tooth
  92.      * @param look the gear's appearance
  93.      */
  94.     public SpurGearThinBody(int toothCount, float pitchCircleRadius,
  95.                 float shaftRadius, float addendum, float dedendum,
  96.                 float gearThickness, float toothTipThickness,
  97.                 Appearance look) {
  98.     this(toothCount, pitchCircleRadius, shaftRadius, addendum,
  99.          dedendum, gearThickness, toothTipThickness, 0.25f, look);
  100.     }
  101.  
  102.     /**
  103.      * Construct a SpurGearThinBody;
  104.      * @return a new spur gear that conforms to the input paramters
  105.      * @param toothCount number of teeth
  106.      * @param pitchCircleRadius radius at center of teeth
  107.      * @param shaftRadius radius of hole at center
  108.      * @param addendum distance from pitch circle to top of teeth
  109.      * @param dedendum distance from pitch circle to root of teeth
  110.      * @param gearThickness thickness of the gear
  111.      * @param toothTipThickness thickness of the tip of the tooth
  112.      * @param toothToValleyRatio ratio of tooth valley to circular pitch
  113.      * (must be <= .25) 
  114.      * @param look the gear's appearance object
  115.      */
  116.     public SpurGearThinBody(int toothCount, float pitchCircleRadius,
  117.                 float shaftRadius, float addendum, float dedendum,
  118.                 float gearThickness, float toothTipThickness,
  119.                 float toothToValleyAngleRatio, Appearance look) { 
  120.  
  121.     this(toothCount, pitchCircleRadius, shaftRadius, addendum,
  122.          dedendum, gearThickness, toothTipThickness, 0.25f, look,
  123.          0.6f * gearThickness, 0.75f * (pitchCircleRadius - shaftRadius));
  124.     }
  125.  
  126.     /**
  127.      * Construct a SpurGearThinBody;
  128.      * @return a new spur gear that conforms to the input paramters
  129.      * @param toothCount number of teeth
  130.      * @param pitchCircleRadius radius at center of teeth
  131.      * @param shaftRadius radius of hole at center
  132.      * @param addendum distance from pitch circle to top of teeth
  133.      * @param dedendum distance from pitch circle to root of teeth
  134.      * @param gearThickness thickness of the gear
  135.      * @param toothTipThickness thickness of the tip of the tooth
  136.      * @param toothToValleyRatio ratio of tooth valley to circular pitch
  137.      * (must be <= .25)
  138.      * @param look the gear's appearance object
  139.      * @param bodyThickness the thickness of the gear body
  140.      * @param crossSectionWidth the width of the depressed portion of the
  141.      * gear's body
  142.      */
  143.     public SpurGearThinBody(int toothCount, float pitchCircleRadius,
  144.                 float shaftRadius, float addendum, float dedendum,
  145.                 float gearThickness, float toothTipThickness,
  146.                 float toothToValleyAngleRatio, Appearance look,
  147.                 float bodyThickness, float crossSectionWidth) {
  148.  
  149.     super(toothCount, pitchCircleRadius, addendum, dedendum,
  150.           toothToValleyAngleRatio);
  151.  
  152.     float diskCrossSectionWidth =
  153.         (rootRadius - shaftRadius - crossSectionWidth)/ 2.0f;
  154.     float outerShaftRadius = shaftRadius + diskCrossSectionWidth;
  155.     float innerToothRadius = rootRadius - diskCrossSectionWidth;
  156.  
  157.     // Generate the gear's body disks, first by the shaft, then in
  158.     // the body and, lastly, by the teeth
  159.     addBodyDisks(shaftRadius, outerShaftRadius,
  160.              gearThickness, look);
  161.     addBodyDisks(innerToothRadius, rootRadius,
  162.              gearThickness, look);
  163.     addBodyDisks(outerShaftRadius, innerToothRadius,
  164.              bodyThickness, look);
  165.  
  166.     // Generate the gear's "shaft" equivalents the two at the teeth
  167.     // and the two at the shaft
  168.     addCylinderSkins(innerToothRadius, gearThickness, InwardNormals, look);
  169.     addCylinderSkins(outerShaftRadius, gearThickness, OutwardNormals, look);
  170.     
  171.     // Generate the gear's interior shaft
  172.     addCylinderSkins(shaftRadius, gearThickness, InwardNormals, look);
  173.  
  174.     // Generate the gear's teeth
  175.     addTeeth(pitchCircleRadius, rootRadius,
  176.          outsideRadius, gearThickness, toothTipThickness,
  177.          toothToValleyAngleRatio, look);
  178.     }
  179.  
  180. }
  181.